#ifndef	__GPIO_h__
#define	__GPIO_h__

#ifndef GPIO_MUX_ALT0
	#define GPIO_MUX_ALT0			(0x00)
#endif
#ifndef GPIO_MUX_ALT1
	#define GPIO_MUX_ALT1			(0x01)
#endif
#ifndef GPIO_MUX_ALT2
	#define GPIO_MUX_ALT2			(0x02)
#endif
#ifndef GPIO_MUX_ALT3
	#define GPIO_MUX_ALT3			(0x03)
#endif

typedef enum {
	GPIO_Interrupt_Disable				= 0x00,
	GPIO_Interrupt_RisingEdge			= 0x01,
	GPIO_Interrupt_FallingEdge			= 0x02,
	GPIO_Interrupt_EitherEdge			= 0x03,
} gpio_intterupt_config_t;


int gpio_get_value(unsigned gpio);
void gpio_set_value(unsigned gpio, int value);
void gpio_direction_input_only(unsigned gpio);
void gpio_direction_output_only(unsigned gpio);
int gpio_direction_input(unsigned gpio);
int gpio_direction_output(unsigned gpio, int value);
int gpio_request(unsigned gpio, const char *tag);
void gpio_free(unsigned gpio);

void gpio_mux_config(unsigned gpio, unsigned mux, unsigned config);

void gpio_interrupt_config(unsigned gpio, unsigned interrupt_type);
unsigned char get_gpio_interrupt_flag(unsigned gpio);
void clear_gpio_interrupt_flag(unsigned gpio);

#endif //__GPIO_h__
